/**
 * Created by wangkui on 2015/7/8.
 */
var User = require('./../../models/schema/UserSchema.js');
var Logdata = require('./../../models/schema/LogdaySchema.js');
var Userlog = require('./../../models/schema/UserlogSchema.js');
var async = require('async'),
    url = require("url");

// 用户列表
// 按数量降序排列
exports.all = function(req, res) {
    User.find({},function (err, data) {
        if(err) { return handleError(res, err); }
        return res.status(200).jsonp(data);
    }).sort({"nums":-1});
};
//创建用户
exports.create = function (req, res) {
    if(req.body.openid==undefined){
        return res.jsonp(201, "openid不能为空值！");
    }
    User.find({"openid":req.body.openid},function(err,user){
        if(user.length===0){
            var sday=getbilldatelog();         //登录日期戳
            //定义一个新的数据集合：拆分前端传来的数据
            var newUser=new User({
                unionid:req.body.unionid,
                openid:req.body.openid,
                nickname:req.body.nickname,
                headimgurl:req.body.headimgurl,
                country:req.body.country,
                province:req.body.province,
                city:req.body.city,
                sex:req.body.sex,
                nums:0,
                sday:sday
            });
            User.create(newUser, function(err, data) {
                if(err) { return handleError(res, err); }
                return res.jsonp(201, data);
            });
        }else{
            return res.jsonp(201, "已注册");
        }
    });
};
//获取当天当前用户找到的小黄人列表
exports.gettodayxhr=function(req,res){
    var openid=req.body.openid;
    Userlog.find({"openid":openid},function (err, data) {
        if(err) { return handleError(res, err); }
        return res.status(200).jsonp(data);
    });
}
//修改用户的小黄人数量
exports.UpdateNums=function(req,res){
    var openid=req.body.openid;
    var Anums=0;//总的数量
    var Nnmus=0;//当天的数量
    var nickname;
    var headimgurl;
    var country;
    var province;
    var city;
    var sex;
    var userxhr;
    async.series({
        //查询openid对应的用户数据
        first:function(callback){
            User.find({"openid":openid},function(err,data){
                nickname=data[0]["nickname"];
                headimgurl=data[0]["headimgurl"];
                country=data[0]["country"];
                province=data[0]["province"];
                city=data[0]["city"];
                sex=data[0]["sex"];
                Anums=data[0]["nums"];
                callback();
            });
        },
        //nums字段数据加1，修改当前包含nums数据
        second:function(callback){
            Anums=Anums+1;
            UpdateNums(openid,Anums,function(err,result){
                if(err) { return handleError(res, err); }
                callback();
            });
        },
        //读取当前用户在当日的小黄人数量
        third:function(callback){
            Logdata.find({"openid":openid},function (err, data) {
                if(data.length>0){
                    Nnmus=parseInt(data[0]["nums"])+1;
                }else{
                    Nnmus=1;
                }
                callback();
            });
        },
        //修改当前用户在当天的操作记录
        four:function(callback){
            if(Nnmus===1){
                //新增记录
                addlog(openid,nickname,headimgurl,country,province,city,sex,Nnmus,function(err){
                    if(err) { return handleError(res, err); }
                    callback();
                });
            }else{
                //修改数量
                UpdateLogNums(openid,Nnmus,function(err){
                    if(err) { return handleError(res, err); }
                    callback();
                });
            }
        },
        //保存一条记录用户选择了哪一个小黄人
        five:function(callback){
            var xhrno=req.body.xhrno;
            adduserlog(openid,nickname,headimgurl,country,province,city,sex,xhrno,function(err){
                if(err) { return handleError(res, err); }
                callback();
            });
        },
        //读取当前用户当天找到的小黄人的情况
        six:function(callback){
            var logdate=getbilldatelog();         //日期戳
            Userlog.find({"logdate":logdate,"openid":openid},function (err, data) {
                if(err) { return handleError(res, err); }
                userxhr=data;
                callback();
            });
        }
    },function (error,results){
        if(error) { return handleError(res, error); }
        return res.status(200).jsonp(userxhr);
    })
}
//优化修改2015-07-20
exports.UpdateUserNums=function(req,res){
    var openid=req.body.openid;
    var xhrno=req.body.xhrno;
    var Anums=0;//总的数量
    var Nnmus=0;//当天的数量
    var nickname;
    var headimgurl;
    var country;
    var province;
    var city;
    var sex;
    var userxhr;
    async.series({
        //新增记录
        two:function(callback){
            //新增记录
            var newUser=new Userlog({
                openid:openid,
                xhrno:xhrno
            });
            Userlog.create(newUser, function(err, data) {
                if(err) { return handleError(res, err); }
                callback();
            });
        },
        //找出所有记录
        thire:function(callback){
            Userlog.find({"openid":openid},function (err, data) {
                if(err) { return handleError(res, err); }
                Anums=data.length;
                callback();
            });
        },
        //读取当前用户当天找到的小黄人的情况
        four:function(callback){
            User.update({"openid":openid},{$set:{"nums":Anums}},function(err,result){
                if(err) { return handleError(res, err); }
                callback();
            });
        }
    },function (error,results){
        if(error) { return handleError(res, error); }
        return res.status(200).jsonp(Anums);
    })
}
//根据openid返回用户信息
exports.getuserinfo=function(req,res){
    var openid=req.body.openid;
    User.find({"openid":openid},function (err, data) {
        if(err) { return handleError(res, err); }
        return res.status(200).jsonp(data);
    });
}
//通过code查询数据
exports.getuserinfobycode=function(req,res){
    var code=req.body.code;
    User.find({"code":code},function (err, data) {
        if(err) { return handleError(res, err); }
        return res.status(200).jsonp(data);
    });
}
/*
 添加一条当日操作小黄人的记录（记录小黄人的号码）
 */
var adduserlog=function(openid,nickname,headimgurl,country,province,city,sex,xhrno,callback){
    var sday=getbilldatelog();         //日期戳
    //定义一个新的数据集合：拆分前端传来的数据
    var newUser=new Userlog({
        openid:openid,
        nickname:nickname,
        headimgurl:headimgurl,
        country:country,
        province:province,
        city:city,
        sex:sex,
        xhrno:xhrno,
        logdate:sday
    });
    Userlog.create(newUser, function(err, data) {
        if(err) { return handleError(res, err); }
        callback();
    });
}
/*
 添加一条当日找到小黄人数量记录
 */
var addlog=function(openid,nickname,headimgurl,country,province,city,sex,nums,callback){
    //定义一个新的数据集合：拆分前端传来的数据
    var newUser=new Logdata({
        openid:openid,
        nickname:nickname,
        headimgurl:headimgurl,
        country:country,
        province:province,
        city:city,
        sex:sex,
        nums:nums
    });
    Logdata.create(newUser, function(err, data) {
        if(err) { return handleError(res, err); }
        callback();
    });
}
/*
 修改用户当前小黄人数量
 */
var UpdateLogNums=function(openid,nums,callback){
    Logdata.update({"openid":openid},{$set:{"nums":nums}},function(err,result){
        if(err) { return handleError(res, err); }
        callback();
    });
}
/*
 修改用户的总的数量
 */
var UpdateNums=function(openid,nums,callback){
    User.update({"openid":openid},{$set:{"nums":nums}},function(err,result){
        if(err) { return handleError(res, err); }
        callback();
    });
}
//获取当日数据排名
exports.getnumlist=function(req,res){
    User.find({},function (err, data) {
        if(err) { return handleError(res, err); }
        return res.status(200).jsonp(data);
    }).limit(40).sort({"nums":-1});
}

//设置所有用户找到的数量为0
exports.setnumszero=function(req,res){

}
//修改用户找到的小黄人数量
exports.updateuserxhrnums=function(req,res){
    var openid=req.body.openid;
    var nums=req.body.nums;
    User.update({"openid":openid},{$set:{"nums":nums}},function(err,result){
    });
};

//删除用户信息
exports.deluserinfo=function(req,res){
    var openid=req.body.openid;
    User.remove({"openid":openid}, function(err, data) {
        if(err) { return handleError(res, err); }
        return res.status(201).jsonp("finished");
    });
};
//更新用户信息及用户当前数量
exports.UpdateUserinfo=function(req,res){
    var openid=req.body.openid;
    var nums=0;
    async.series({
        //查询用户Userlog中的数据
        one:function(callback){
            Userlog.find({"openid":openid},function (err, data) {
                if(err) { return handleError(res, err); }
                if(!data){
                    nums=data.length;
                }
                callback();
            });
        },
        //重新插入用户信息
        two:function(callback){
            var sday=getbilldatelog();         //登录日期戳
            //定义一个新的数据集合：拆分前端传来的数据
            var newUser=new User({
                unionid:req.body.unionid,
                openid:req.body.openid,
                nickname:req.body.nickname,
                headimgurl:req.body.headimgurl,
                country:req.body.country,
                province:req.body.province,
                city:req.body.city,
                sex:req.body.sex,
                nums:nums,
                sday:sday
            });
            User.create(newUser, function(err, data) {
                if(err) { return handleError(res, err); }
                callback();
            });
        }
    },function(err,results){
        return res.status(200).jsonp(nums);
    });
};


//根据新的需求，修改。修改日期：2015-07-17
/*
 1.一次提交所有找到的小黄人
 1.1先删除提交过来的小黄人和当前用户的openid在数据库中的记录
 1.2插入提交过来的小黄人和当前用户的openid记录
 1.3合计当前状态下已经提交的所有小黄人的数量
 1.4修改users集合中对应的用户的数量
 1.5返回总数
 */
//批量删除
exports.deluserlogs=function(req,res){
    //var openid="ogMHVjnNR9PURrYn7REHqb8qeCDw";//用户
    //var Arrxhr="12,13,14,15,16,17,18,19,";//小黄人集合
    var openid=req.body.openid;//用户
    var Arrxhr=req.body.xhrnos;//小黄人集合
    var Arr=Arrxhr.split(",");//拆分到数据组中
    var xhrno;//小黄人编号
    var count=1;//循环计数
    var totle=0;//合计总量
    if(Arr[0]==''){
        return res.status(200).jsonp(Arr.length);
    }
    totle=Arr.length+1;
    for(var i=0;i<Arr.length;i++){
        xhrno=Arr[i];
        console.log(Arr.length);
        async.series({
            //先删除提交过来的小黄人和当前用户的openid在数据库中的记录
            one:function(callback){
                Userlog.remove({"xhrno":xhrno,"openid":openid}, function(err, data) {
                    if(err) { return handleError(res, err); }
                    count=count+1;
                    callback();
                });
            }
        },function (err,results){
            console.log(count);
            //查询返回
            if(count==totle){
                return res.status(200).jsonp("finished");
            }
        });
    }
};
exports.updatexhrlist=function(req,res){
    //var openid="ogMHVjnNR9PURrYn7REHqb8qeCDw";//用户
    //var Arrxhr="12,13,14,15,16,17,18,19,";//小黄人集合
    var openid=req.body.openid;//用户
    var Arrxhr=req.body.xhrnos;//小黄人集合

    //{"openid":"ogMHVjnNR9PURrYn7REHqb8qeCDw"}

    var Arr=Arrxhr.split(",");//拆分到数据组中
    var xhrno;//小黄人编号
    var count=1;//循环计数
    var totle=0;//合计总量
    if(Arr[0]==''){
        return res.status(200).jsonp(Arr.length);
    }
    console.log(Arr.length);

    for(var i=0;i<Arr.length;i++){
        if(Arr[i]!=''){
            xhrno=Arr[i];
            console.log(xhrno);
            async.series({
                //插入提交过来的小黄人和当前用户的openid记录
                two:function(callback){
                    var newUser=new Userlog({
                        openid:openid,
                        xhrno:xhrno
                    });
                    Userlog.create(newUser, function(err, data) {
                        if(err) { return handleError(res, err); }
                        count=count+1;
                        console.log(count);
                        callback();
                    });
                }
                ,
                //合计当前状态下已经提交的所有小黄人的数量
                thire:function(callback){
                    if(count==Arr.length){
                        Userlog.find({"openid":openid},function(err,data){
                            if(err) { return handleError(res, err); }
                            totle=data.length;
                            callback();
                        });
                    }
                }
                ,
                //修改users集合中对应的用户的数量
                four:function(callback){
                    if(count==Arr.length){
                        User.update({"openid":openid},{$set:{"nums":totle}},function(err,result){
                            if(err) { return handleError(res, err); }
                            callback();
                        });
                    }
                }
            },function (err,results){
                //查询返回
                if(count==Arr.length){
                    return res.status(200).jsonp(totle);
                }
            });
        }
    }
};
//查询openid,并修改数据
exports.updateusernums=function(req,res){
    var openid=req.body.openid;//用户
    var totle=0;//合计总量
    async.series({
        //先查询
        one:function(callback){
            Userlog.find({"openid":openid},function(err,data){
                if(err) { return handleError(res, err); }
                totle=data.length;
                callback();
            });
        },
        //修改数据
        two:function(callback){
            User.update({"openid":openid},{$set:{"nums":totle}},function(err,result){
                if(err) { return handleError(res, err); }
                callback();
            });
        }
    },function(err,result){
        return res.status(200).jsonp(totle);
    });
}
//添加小黄人查找记录
exports.updateuserlog = function(req,res){
    var openid=req.body.openid;    //用户OpenId
    var Arrxhr=req.body.xhrnos;     //小黄人集合

    var Arr=Arrxhr.split(",");      //拆分到数据组中

    async.forEachSeries(Arr, function(item, callback) {
        var query = {openid:openid,xhrno:item};
        Userlog.count(query,function(err,userlog){
            //如果不存在，新增
            if(userlog > 0)
            {
                callback();
            }
            else
            {
                Userlog.create(query, function(err, data) {
                    callback();
                });
            }
        });
    }, function(err) {
        Userlog.count({openid:openid,"xhrno":{ $ne :""}}, function(err,count){
            User.update({"openid":openid},{$set:{"nums":count}},function(err,result){
            });
            return res.status(200).jsonp(count);
        });
    });
};


//清空userlogs中的数据记录(重新开始游戏时候使用)
exports.RemoveUserlogs=function(req,res){
    Userlog.remove({}, function(err, data) {
        return res.status(200).jsonp("del finished");
    });
};
//批量设置users集合中nums值为0(重新开始游戏时候使用)
exports.SetUserNums=function(req,res){
    var count=0;
    User.find({},function(err,data){
        if(err) { return handleError(res, err); }
        for(var i=0;i<data.length;i++){
            User.update({"_id":data[i]["_id"]},{$set:{nums:0}},function(errs,datas){
                if(errs) { return handleError(res, errs); }
            })
        }
        return res.status(200).jsonp("update finished");
    })
};

//生成当前天的时间戳作为数据库日期查询段标签
function getbilldatelog(){
    var now=new Date();
    var intyear=parseInt(now.getFullYear());
    var intmonth=parseInt(now.getMonth())+1;
    var intday=parseInt(now.getDate());

    if(intmonth<10)
    {
        smonth="0"+intmonth.toLocaleString();
    }
    else
    {
        smonth=intmonth.toLocaleString();
    }

    if(intday<10)
    {
        sday="0"+intday.toLocaleString();
    }
    else
    {
        sday=intday.toLocaleString();
    }

    log=intyear.toLocaleString()+smonth.toLocaleString()+sday.toLocaleString();
    return log;
}

